using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>pages_types</code>.
    /// </summary>
    public interface IPageTypeDAO : IGenericDAO<PageType, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie listy obiektów na podstawie języka.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <returns>Lista rekordów o zadanym języku</returns>
        IQueryable<PageType> FindByLanguage(int languageId);

        /// <summary>
        /// Wstawianie listy obiektów na podstawie jezyka.
        /// </summary>
        /// <param name="defaultLanguageId">domyslny jezyk</param>
        /// <param name="newLanguageId">nowy jezyk</param>
        /// <returns>true jesli sie udalo, false wpp</returns>
        bool InsertForNewLanguage(int defaultLanguageId, int newLanguageId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie skrótu.
        /// </summary>
        /// <param name="pageTypeAbbr">skrót</param>
        /// <returns>Lista rekordów o zadanym skrócie</returns>
        IQueryable<PageType> FindByAbbr(string pageTypeAbbr);

        /// <summary>
        /// Pobieranie listy obiektów o pustym skrócie.
        /// </summary>
        /// <returns>Listę rekordów o pustym skrócie.</returns>
        IQueryable<PageType> FindByAbbrNull();

        /// <summary>
        /// Pobieranie listy obiektów na podstawie skrótu i języka.
        /// </summary>
        /// <param name="pageTypeAbbr">skrót</param>
        /// <param name="languageId">język</param>
        /// <returns>Lista rekordów o zadanym skrócie i języku</returns>
        IQueryable<PageType> FindByAbbrAndLanguage(string pageTypeAbbr, int languageId);

        /// <summary>
        /// Pobieranie obiektu na podstawie nazwy i języka.
        /// </summary>
        /// <param name="pageTypeName">nazwa</param>
        /// <param name="languageId">język</param>
        /// <returns>Rekord o zadanej nazwie i języku</returns>
        PageType FindByNameAndLanguage(string pageTypeName, int languageId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie nazwy, języka i o innym id niż zadane.
        /// </summary>
        /// <param name="pageTypeName">nazwa</param>
        /// <param name="languageId">język</param>
        /// <param name="pageTypeId">typ strony</param>
        /// <returns>Lista rekordów o zadanej nazwie, języku i o innym id niż zadane</returns>
        IQueryable<PageType> FindByNameAndLanguageAndNoPageTypeId(string pageTypeName, int languageId, int pageTypeId);

        /// <summary>
        /// Pobieranie maksymalnego id elemntu.
        /// </summary>
        /// <returns>maksymalny numer id elementu.</returns>
        int SelectMaxId();

        /// <summary>
        /// Usuwanie obiektow po jezyku.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>true dla sukcesu, false w przeciwnym razie</returns>
        bool DeleteByLanguage(int languageId);
    }
}
